package com.doit.day06

import java.io.{FileOutputStream, ObjectOutputStream}
import scala.beans.BeanProperty


object _03_样例类 {
  def main(args: Array[String]): Unit = {
    /**
     * 从不用new上面就能够看出来，样例类给我们重写了apply方法
     * 实现了伴生类和伴生对象
     * 还给我们重写了toString方法
     * 重写了equals方法  很有意义：先比较两个比较的对象类型是否一样
     * 类型是一样的再去比较每一个属性的值，都一样的情况下返回true
     * 重写了hashcode方法
     * 还他妈的给我们实现了序列化接口
     *
     * unapply ==》 样例类可以更好的使用模式匹配
     *
     *
     */
    val pig: Pig =  Pig("佩奇", 2, 200)
    val pig1: Pig = Pig("佩奇", 2, 200)

    val pig2: Pig1 = new Pig1("佩奇", 2, 200)
    val pig3: Pig1 = new Pig1("佩奇", 2, 200)

    println(pig)//Pig(佩奇,2,200.0)
    println(pig2)//com.doit.day06.Pig1@2f7c7260

    println(pig.equals(pig1))//true
    println(pig2.equals(pig3))//false

    println(pig.hashCode())//-1788725817
    println(pig1.hashCode())//-1788725817
    println(pig2.hashCode())//796684896
    println(pig3.hashCode())//1802598046

    val stream: ObjectOutputStream = new ObjectOutputStream(new FileOutputStream("D://a.txt"))

    stream.writeObject(pig)



  }
}

case class Pig(@BeanProperty
                name:String,
               @BeanProperty
                age:Int,
               @BeanProperty
                weight:Double
              )

class Pig1(val name:String,val age:Int,val weight:Double) extends Serializable